package com.zy.yun.utils;

import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

/**
 * @Author: 王彦委
 * @Description: redis工具类 todo 未做异常处理
 * @Date: 21:40 2019/11/7
 */
@Component
public class RedisUtil<T,V> {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * @Author: 王彦委
     * @Description: 设置 key==>value 字符串
     * @Date: 21:41 2019/11/7
     */
    public void setString(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * @Author: 王彦委
     * @Description: 根据 key 获取 value 字符串
     * @Date: 21:43 2019/11/7
     */
    public String getString(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
      * @Author: 王彦委
      * @Description: 设置 对象
      * @Date: 21:44 2019/11/7
      */
    public void setObject(String key ,Object object) {
        redisTemplate.opsForValue().set(key, JSONObject.toJSONString(object));
    }

    /**
      * @Author: 王彦委
      * @Description: 根据key,查询并指定返回 指定类型
      * @Date: 21:46 2019/11/7
      */

    public T getObject(String key,Class<T> clazz) {
        String str = redisTemplate.opsForValue().get(key);

        return str == null ? null : JSONObject.parseObject(str, clazz);
    }

    /**
     * @Author: 王彦委
     * @Description: 存放map,map中存在字符串
     * @Date: 21:58 2019/11/7
     */
    public void setMapString(String name,String key,String value) {
        redisTemplate.opsForHash().put(name,key,value);
    }

    /**
      * @Author: 王彦委
      * @Description: 获取map中的字符串
      * @Date: 22:03 2019/11/7
      */

    public String getMapString(String name,String key) {
        Object o = redisTemplate.opsForHash().get(name, key);

        return o == null ? null : o.toString();
    }
    /**
      * @Author: 王彦委
      * @Description: 存放map,map中存在json串
      * @Date: 22:01 2019/11/7
      */

    public void setMapObject(String name,String key ,Object object) {
        redisTemplate.opsForHash().put(name,key,JSONObject.toJSONString(object));
    }

    /**
     * @Author: 王彦委
     * @Description: 获取map中存在json串，并返回指定类型
     * @Date: 22:03 2019/11/7
     */

    public T getMapObject(String name,String key,Class<T> clazz) {
        Object o = redisTemplate.opsForHash().get(name, key);
        return  o==null ? null:JSONObject.parseObject(o.toString(), clazz);
    }
    /**
     * @Author: 王彦委
     * @Description: 获取map中存在json串，并返回指定类型
     * @Date: 22:03 2019/11/7
     */

    public V getMapObject2(String name,String key,Class<V> clazz) {
        Object o = redisTemplate.opsForHash().get(name, key);
        return  o==null ? null:JSONObject.parseObject(o.toString(), clazz);
    }
}
